package sorttree

type Stack struct {
	stack []*treeNode
	base  int // 栈底指针
	top   int // 栈顶指针
}

func InitStack(n int) Stack {
	stack := Stack{
		stack: make([]*treeNode, n),
	}
	return stack
}

func (s *Stack) Push(value *treeNode) {
	if s.top == len(s.stack) {
		s.stack = append(s.stack, value)
	} else {
		s.stack[s.top] = value
	}
	s.top++
}

func (s *Stack) Pop() (*treeNode, bool) {
	if s.top == s.base {
		return nil, false
	}
	s.top--
	return s.stack[s.top], true
}
